--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_path_jail_oracles.py e5756d7ab065475a18acdcafc008a767fcff87e0 (e5756d7a) Text, 5.86 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Oracles for path-jail / identity-isolation bugs across storage handlers."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787os
Tff7b72import T7ee787zipfile
Tff7b72from T7ee787types Tff7b72import Te6edf3SimpleNamespace
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3MagicMock
Tff7b72import T7ee787pytest
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787bot_handler Tff7b72import Te6edf3BotHandler
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787database Tff7b72import Te6edf3DatabaseTb4b4b4, Te6edf3DatabaseRestoreError
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787rncp_handler Tff7b72import Te6edf3RNCPHandler
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787rns_filesync_handler Tff7b72import Te6edf3RnsFilesyncHandler
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787web_audio_bridge Tff7b72import Te6edf3WebAudioBridge
Tff7b72def Td2a8fftest_rncp_safe_filename_rejects_dotdotTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3RNCPHandlerTff7b72.Td2a8ff_safe_received_filenameTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffdownloaded_fileTa5d6ff"
Tff7b72assert Te6edf3RNCPHandlerTff7b72.Td2a8ff_safe_received_filenameTb4b4b4(Ta5d6ff"Ta5d6ff../secretTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffsecretTa5d6ff"
Tff7b72assert Te6edf3RNCPHandlerTff7b72.Td2a8ff_safe_received_filenameTb4b4b4(Ta5d6ff"Ta5d6ffa/../../etc/passwdTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffpasswdTa5d6ff"
Tff7b72assert Te6edf3RNCPHandlerTff7b72.Td2a8ff_safe_received_filenameTb4b4b4(Ta5d6ff"Ta5d6ffok.binTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffok.binTa5d6ff"
Tff7b72def Td2a8fftest_rncp_path_under_dir_blocks_escapeTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3handler Tff7b72= Te6edf3RNCPHandlerTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4)
Te6edf3recv Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffrncp_receivedTa5d6ff"
Te6edf3recvTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3safe Tff7b72= Te6edf3handlerTff7b72.Td2a8ff_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3recvTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6fffile.binTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3safeTff7b72.Td2a8ffstartswithTb4b4b4(Tffa657strTb4b4b4(Te6edf3recvTff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149PermissionErrorTb4b4b4)Tb4b4b4:
Te6edf3handlerTff7b72.Td2a8ff_path_under_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3recvTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ff../outside.binTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_rncp_fetch_save_dir_jails_outside_storageTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3storage Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidTa5d6ff"
Te6edf3storageTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3handler Tff7b72= Te6edf3RNCPHandlerTb4b4b4(Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3storageTb4b4b4)Tb4b4b4)
Te6edf3outside Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffoutsideTa5d6ff"
Te6edf3outsideTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149PermissionErrorTb4b4b4)Tb4b4b4:
Te6edf3handlerTff7b72.Td2a8ff_resolve_fetch_save_dirTb4b4b4(Tffa657strTb4b4b4(Te6edf3outsideTb4b4b4)Tb4b4b4)
Te6edf3nested Tff7b72= Te6edf3handlerTff7b72.Td2a8ff_resolve_fetch_save_dirTb4b4b4(Ta5d6ff"Ta5d6ffrncp/customTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3nestedTff7b72.Td2a8ffstartswithTb4b4b4(Tffa657strTb4b4b4(Te6edf3storageTff7b72.Td2a8ffresolveTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_filesync_rejects_identity_root_and_reservedTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3storage Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidTa5d6ff"
Te6edf3storageTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6ffbotsTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3handler Tff7b72= Te6edf3RnsFilesyncHandlerTb4b4b4(
Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SimpleNamespaceTb4b4b4(Tffa657hashTff7b72=Ta5d6ffbTa5d6ff"Tffea00\x11Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3storageTb4b4b4)
Tb4b4b4)
Tff7b72assert Te6edf3handlerTff7b72.Td2a8ff_resolve_sync_directoryTb4b4b4(Tffa657strTb4b4b4(Te6edf3storageTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3handlerTff7b72.Td2a8ff_resolve_sync_directoryTb4b4b4(Tffa657strTb4b4b4(Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3handlerTff7b72.Td2a8ff_resolve_sync_directoryTb4b4b4(Tffa657strTb4b4b4(Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6ffbotsTa5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72is Tff7b72None
Te6edf3ok Tff7b72= Te6edf3handlerTff7b72.Td2a8ff_resolve_sync_directoryTb4b4b4(Tffa657strTb4b4b4(Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6fffilesyncTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffcustomTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3ok Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3okTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6fffilesync/customTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3okTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6fffilesyncTffea00\\Ta5d6ffcustomTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_filesync_manager_resolve_never_leaves_sync_rootTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3storage Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidTa5d6ff"
Te6edf3storageTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3outside Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffOUTSIDETa5d6ff"
Te6edf3outsideTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3outside Tff7b72/ Ta5d6ff"Ta5d6ffsecret.txtTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3handler Tff7b72= Te6edf3RnsFilesyncHandlerTb4b4b4(
Te6edf3MagicMockTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3SimpleNamespaceTb4b4b4(Tffa657hashTff7b72=Ta5d6ffbTa5d6ff"Tffea00\x22Ta5d6ff" Tff7b72* T79c0ff16Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3storageTb4b4b4)
Tb4b4b4)
Te6edf3sync_root Tff7b72= Te6edf3handlerTff7b72.Td2a8ff_sync_rootTb4b4b4(Tb4b4b4)
Te6edf3payloads Tff7b72= Tb4b4b4[
Ta5d6ff"Ta5d6ff../identityTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ff../../OUTSIDE/secret.txtTa5d6ff"Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3outside Tff7b72/ Ta5d6ff"Ta5d6ffsecret.txtTa5d6ff"Tb4b4b4)Tb4b4b4,
Tffa657strTb4b4b4(Te6edf3storage Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ff/etc/passwdTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffok/inside.txtTa5d6ff"Tb4b4b4,
Tb4b4b4]
Tff7b72for Te6edf3payload Tff7b72in Te6edf3payloadsTb4b4b4:
Te6edf3abspathTb4b4b4, Te6edf3err Tff7b72= Te6edf3handlerTff7b72.Td2a8ff_resolve_manager_pathTb4b4b4(Te6edf3payloadTb4b4b4, Te6edf3allow_rootTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3abspath Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72assert Te6edf3abspath Tff7b72== Te6edf3sync_root Tff7b72or Te6edf3abspathTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3sync_root Tff7b72+ Te6edf3osTff7b72.Td2a8ffsepTb4b4b4)
Tff7b72assert Te6edf3err Tff7b72is Tff7b72None
Tff7b72elseTb4b4b4:
Tff7b72assert Te6edf3err Tff7b72is Tff7b72not Tff7b72None
Te6edf3root_absTb4b4b4, Te6edf3root_err Tff7b72= Te6edf3handlerTff7b72.Td2a8ff_resolve_manager_pathTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3allow_rootTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72assert Te6edf3root_err Tff7b72is Tff7b72None
Tff7b72assert Te6edf3root_abs Tff7b72== Te6edf3sync_root
Tff7b72def Td2a8fftest_restore_rejects_bad_backup_without_wiping_live_dbTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3db_path Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffmain.dbTa5d6ff"
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Tffa657strTb4b4b4(Te6edf3db_pathTb4b4b4)Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3db_pathTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3DatabaseTff7b72.Td2a8ff_looks_like_sqliteTb4b4b4(Tffa657strTb4b4b4(Te6edf3db_pathTb4b4b4)Tb4b4b4)
Te6edf3bad Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffbad.dbTa5d6ff"
Te6edf3badTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffnot a sqlite databaseTa5d6ff"Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Te6edf3DatabaseRestoreErrorTb4b4b4, Te6edf3matchTff7b72=Ta5d6ff"Ta5d6ffnot a valid SQLiteTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3dbTff7b72.Td2a8ffrestore_databaseTb4b4b4(Tffa657strTb4b4b4(Te6edf3badTb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3db_pathTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3DatabaseTff7b72.Td2a8ff_looks_like_sqliteTb4b4b4(Tffa657strTb4b4b4(Te6edf3db_pathTb4b4b4)Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffclose_allTb4b4b4(Tb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffskipifTb4b4b4(Te6edf3osTff7b72.Td2a8ffname Tff7b72== Ta5d6ff"Ta5d6ffntTa5d6ff"Tb4b4b4, Te6edf3reasonTff7b72=Ta5d6ff"Ta5d6ffsymlink semantics differ on WindowsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_backup_skips_symlink_files_outside_identityTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3identity Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"
Te6edf3identityTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3outside Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffOUTSIDETa5d6ff"
Te6edf3outsideTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3secret Tff7b72= Te6edf3outside Tff7b72/ Ta5d6ff"Ta5d6ffsecret.txtTa5d6ff"
Te6edf3secretTff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffleakedTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3link Tff7b72= Te6edf3identity Tff7b72/ Ta5d6ff"Ta5d6ffsecret.txtTa5d6ff"
Te6edf3linkTff7b72.Td2a8ffsymlink_toTb4b4b4(Te6edf3secretTb4b4b4)
Te6edf3db_path Tff7b72= Te6edf3identity Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"
Te6edf3db Tff7b72= Te6edf3DatabaseTb4b4b4(Tffa657strTb4b4b4(Te6edf3db_pathTb4b4b4)Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffinitializeTb4b4b4(Tb4b4b4)
Te6edf3backup Tff7b72= Te6edf3dbTff7b72.Td2a8ffbackup_databaseTb4b4b4(Tffa657strTb4b4b4(Te6edf3identityTb4b4b4)Tb4b4b4)
Te6edf3dbTff7b72.Td2a8ffclose_allTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3backupTb4b4b4[Ta5d6ff"Ta5d6ffpathTa5d6ff"Tb4b4b4]Tb4b4b4, Ta5d6ff"Ta5d6ffrTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3zfTb4b4b4:
Te6edf3names Tff7b72= Te6edf3zfTff7b72.Td2a8ffnamelistTb4b4b4(Tb4b4b4)
Tff7b72assert Ta5d6ff"Ta5d6ffsecret.txtTa5d6ff" Tff7b72not Tff7b72in Te6edf3names
Tff7b72def Td2a8fftest_bot_delete_refuses_rmtree_outside_bots_dirTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3identity Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidTa5d6ff"
Te6edf3identityTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3outside Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffpreciousTa5d6ff"
Te6edf3outsideTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3marker Tff7b72= Te6edf3outside Tff7b72/ Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"
Te6edf3markerTff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffdo not deleteTa5d6ff"Tb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Te6edf3handler Tff7b72= Te6edf3BotHandlerTb4b4b4(Tffa657strTb4b4b4(Te6edf3identityTb4b4b4)Tb4b4b4)
Te6edf3bot_id Tff7b72= Ta5d6ff"Ta5d6ffevilbotTa5d6ff"
Te6edf3handlerTff7b72.Td2a8ffbots_state Tff7b72= Tb4b4b4[
Tb4b4b4{
Ta5d6ff"Ta5d6ffidTa5d6ff"Tb4b4b4: Te6edf3bot_idTb4b4b4,
Ta5d6ff"Ta5d6fftemplate_idTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffechoTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffEvilTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffstorage_dirTa5d6ff"Tb4b4b4: Tffa657strTb4b4b4(Te6edf3outsideTb4b4b4)Tb4b4b4,
Ta5d6ff"Ta5d6ffenabledTa5d6ff"Tb4b4b4: Tff7b72FalseTb4b4b4,
Ta5d6ff"Ta5d6ffpidTa5d6ff"Tb4b4b4: Tff7b72NoneTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4]
Te6edf3handlerTff7b72.Td2a8ffstop_bot Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3handlerTff7b72.Td2a8ff_save_state Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3handlerTff7b72.Td2a8ffdelete_botTb4b4b4(Te6edf3bot_idTb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3markerTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3markerTff7b72.Td2a8ffread_textTb4b4b4(Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffdo not deleteTa5d6ff"
Tff7b72def Td2a8fftest_web_audio_push_drops_without_active_callTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3tele_mgr Tff7b72= Te6edf3SimpleNamespaceTb4b4b4(Te6edf3telephoneTff7b72=Tff7b72NoneTb4b4b4, Te6edf3is_voicemail_session_activeTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3bridge Tff7b72= Te6edf3WebAudioBridgeTb4b4b4(Te6edf3tele_mgrTb4b4b4, Te6edf3config_managerTff7b72=Tff7b72NoneTb4b4b4, Te6edf3force_enabledTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3bridgeTff7b72.Td2a8fftx_source Tff7b72= Te6edf3MagicMockTb4b4b4(Tb4b4b4)
Te6edf3bridgeTff7b72.Td2a8ffpush_client_frameTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x00Tffea00\x01Ta5d6ff"Tb4b4b4)
Te6edf3bridgeTff7b72.Td2a8fftx_sourceTff7b72.Td2a8ffpush_pcmTff7b72.Td2a8ffassert_not_calledTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────